Code reordering allows an instruction or sequence of instructions to be executed before it is known that the dynamic code flow actually reaches the point in the program where the sequence of instructions is needed. This has the benefit of removing latency in program flow by attempting to look ahead. Code reordering allows for improved performance of application programs because instructions can be executed in advance. However, the reordered code sequence could produce a different architectural state than the normal code flow would create, due to reordered instructions generating exceptions that would not have otherwise been generated. In certain environments where precise exceptions must be preserved, such as binary translation, this may be unacceptable.
Methods have been presented that solve the problem of preserving precise exceptions, but all of these methods incur some additional cost in hardware, processing speed, and/or memory. Some of these methods require additional registers be set aside that are not accessible for general use and require additional processing to restore the architectural state. Other methods require additional hardware support and memory to store the speculated register values and use the original code sequence to restore the architectural state.